package com.itqf.factory;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.springframework.beans.factory.FactoryBean;

import java.io.InputStream;

/**
 * @Description: spring构建复杂的对象时需要实现FactoryBean 接口
 * 当项目中涉及到复杂的对象时，如果要通过Spring工厂构建  那么需要按照如下步骤：
 * 1）编写一个类实现FactoryBean 接口
 *      重写三个方法
 * 2）在Spring的配置文件中  通过bean标签配置该类即可。
 *
 *
 * 3）在测试类中就可以获得构建的复杂对象
 * System.out.println(ac.getBean("sqlSessionFactory"));
 *
 * @Company: 千锋互联
 * @Author: 李丽婷
 * @Date: 2020/11/9
 * @Time: 下午4:47
 */
public class MySqlSessionFactoryBean implements FactoryBean<SqlSessionFactory> {

    /**
     * 返回构建的对象
     * @return
     * @throws Exception
     */
    @Override
    public SqlSessionFactory getObject() throws Exception {
        InputStream is = Resources.getResourceAsStream("mybatisConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                .build(is);

        return sqlSessionFactory;
    }

    /**
     * 返回构建的对象的Class对象
     * @return
     */
    @Override
    public Class<?> getObjectType() {
        return SqlSessionFactory.class;
    }

    /**
     * 是否是单例
     * @return
     */
    @Override
    public boolean isSingleton() {
        return true;
    }
}
